<?php
/*
 *	Created on 2008-04-12 / 18:34:49
 *	Filename: lang.php
 *	User: tomusdrw (tomusdrw.blacksoft.eu)
 *	@author: Blacksoft.eu (c) 2008
 *	@package: 
 *	
 */
 
 
 /**
  * Stos z informacjami do wyswietlenia
  * Metody: add($co, $typ), ret(), clear();
  */
 class info {
	private $tablica=array(); 
	
	/**
	 * Dodaje nową informacje
	 * @param string $co Wiadomość
	 * @param string $typ warn; info; ok; error; critical; 
	 */
	public function add ($co, $typ=0) {
		switch ($typ) {
			case 'warn': $this->tablica[]=array('warn',$co); break;
			case 'info': $this->tablica[]=array('info',$co); break;
			case 'ok': $this->tablica[]=array('ok',$co); break;
			case 'critical': $this->tablica[] = array('critical', $co); break;
			default: $this->tablica[]=array('error',$co);
		}
	}
	/**
	 * Zwraca tablicę z wiadomościami
	 */
	public function ret() {
		return array_reverse($this->tablica);
	}
	/**
	 * Czyści całą tablicę
	 */
	public function clear() {
		$this->tablica=array();
	}
 };

 /**
  * Obsluga jezyków (req info)
  * Metody: lang(&$info, $id), text($id, $rep=0), name(), info($id, $type, $rep=0); 
  */
 class lang {
	private $lang, $id;
	public $info;
	private $exec_module;
	public function module($mod) {
		$this->exec_module = '_module_'.$mod;
	}
	public function unmodule() {
		unset($this->exec_module);
	}
	public function load_module($mod_name, $file) {
		if (file_exists(CONF_MODULE_LANG_PATH.$file.'.php')) {
			include(CONF_MODULE_LANG_PATH.$file.'.php');
			$lang = null;
			if (isset(${'lang_'.$this->id})) {
				$lang = ${'lang_'.$this->id};
			} elseif (isset($lang_default) && isset(${'lang_'.$lang_default})) {
				$lang = ${'lang_'.$lang_default};
			}
			if (isset($lang)) {
				$this->lang['_module_'.$mod_name] = $lang;
			}
		}
	}
	public function unload_module($mod_name) {
		if (isset($this->lang['_module_'.$mod_name]))  {
			unset($this->lang['_module_'.$mod_name]);
			return 1;
		}
		return 0;
	}
	/**
	 * Konstruktor klasy do obsługi języka
	 * W razie braku wybranego języka próbuje załadować domyślny
	 * @param info &$info Adres do aktywnej instancji klasy info
	 * @param string $id=0 Id wybranego języka
	 */
	public function lang(&$info, $id=0) {
		//zakladamy ze nie ma błedów
		$warn=0;
		//sprawdzamy czy info na pewno jest obiektem
		if (is_object($info))
			$this->info=$info;
		else //info o bledzie
			die('<br/>BŁĄD: Niepoprawnie wywołana klasa lang! Upewnij się, że jest zaladowana klasa info!');
		
		if ($id===0) $id=CONF_LANG_DEFAULT; //jesli niezdefiniowany jezyk ustaw domyslny
		$file=CONF_LANG_PATH.$id.'.php'; //sciezka do pliku z jezykiem
	
		if (!file_exists($file)) { //sprawdzamy czy w ogole istnieje
			$file=CONF_LANG_PATH."/".CONF_LANG_DEFAULT.'.php'; //probujemy z domyslnym
	
			if (!file_exists($file)) //nie ma nawet domyslnego
				die("<br/>BŁĄD: Nie znaleziono domyślnego pliku językowego!<br/>\nError: Default language file hasn't been found!");
			else {
				//wyswietl ostrzrzenie o wybraniu domyslnego pliku jezykowego
				$warn=1; 
				$id=CONF_LANG_DEFAULT;
			}
		}
		
	/*	$user_lang=array();
		if (file_exists(CONF_USER_LANG_PATH.$id)) {
			$x = scandir(CONF_USER_LANG_PATH.$id);
			foreach ($x as $v) {
				if (ereg('^.*\.php', $v)) {
					unset($lang);
					if (file_exists(CONF_USER_LANG_PATH.$id.'/'.$v))
						include(CONF_USER_LANG_PATH.$id.'/'.$v);
					if (isset($lang)) 
							$user_lang+=$lang;
				}
				
			}
		}
		*/
		include($file); //ladujemy nasz plik z jezykiem
		if (isset($lang)){ //sprawdzamy czy ma wymagana tablice
			$this->lang=$lang; //ladujemy tablice do zmiennej
			$this->id=$id; //ustawiamy id jezyka
		} else die("<br/>BŁĄD: $file jest niepoprawnym plikiem językowym!<br/>\nError: $file is not valid language file!");
		if ($warn!==0) { 
			if($warn==1) { //dodajemy ostrzezenie
				$warn=$this->lang['int_def_lang_loaded'];
			}
			$info->add($warn, 'info');
			debug('LANG: '.$warn, DBG_WARN, 2);
		}
	}
	/**
	 * Zwraca tekst o podanym id i podmienia %s na $rep
	 * @param string $id id tekstu
	 * @param string $rep na co podmienic %s
	 * @return mixed Zwraca tekst w danym języku
	 */
	public function text($id, $rep=0) {
		if (!isset($this->lang[$id]) && !(isset($this->exec_module) && isset($this->lang[$this->exec_module][$id]))) {
			$this->info->add(str_replace('%0', $id, $this->lang['int_no_idx']), 'warn');
			return str_replace('%0', $id, $this->lang['int_no_idx']);
		}
		$co = ((isset($this->exec_module) && isset($this->lang[$this->exec_module]) && isset($this->lang[$this->exec_module][$id]))?$this->lang[$this->exec_module][$id]:$this->lang[$id]);
		if (is_string($co)) {
			if ($rep===0) $rep = $id;
			if (is_array($rep)) {
				$ile = count($rep);
				for($i=$ile-1; $i>=0; $i--) {
					$co = str_replace('%'.$i, $rep[$i], $co);
				}
			} else 
				$co = str_replace('%0', $rep, $co);
		}
		return $co;
	}
	/**
	 * Zwraca id aktualnego języka
	 * @return string Id języka
	 */
	public function name() {
		return $this->id;
	}
	/**
	 * Dodaje tekst o podanym id do messagestack
	 * @param string $id id tekstu
	 * @param string $type typ błędu(w,o,i,c,e)
	 * @param string $rep na co podmienic %s
	 */
	public function info($id, $type, $args=0) {
		if (strlen($type)<2) {
			switch ($type) {
				case "c": $type="critical"; break;
				case "o": $type="ok"; break;
				case "i": $type="info"; break;
				case "w": $type="warn"; break;
				default: $type="error";
			}
		}
		return $this->info->add($this->text($id, $args), $type);		
	}
 };
?>